var express = require('express');
var path = require('path');
var app = express();

// 注册全局中间件：用于返回json数据
app.use(function(req, res, next) {
    //封装返回数据的函数
    res.cc = function(status, {
        code = 200,
        msg = "成功",
        data = null
    }) {
        // status是http状态码，code是业务状态码
        res.json(status, {
            code,
            msg,
            data
        })
    }
    next()
});

// 接收表单数据的中间件
app.use(express.json({
    limit: '50mb'
}));
app.use(express.urlencoded({
    extended: false,
    limit: '50mb'
}));
// 跨域中间件
const cors = require('cors')
app.use(cors())

//注册验证用户是否登录的中间件
const {
    expressjwt: expressJwt
} = require('express-jwt')

app.use(expressJwt({
    secret: 'kuaijian', //同加密的秘钥
    algorithms: ['HS256']
}).unless({
    //排除掉不需要做jwt验证的路由前缀
    //path:[/^\/api\//]
    path: [/^\/api\//]
}))



// 托管的静态目录
app.use(express.static(path.join(__dirname, 'public')));

// 路由模块
var indexRouter = require('./routes/index');
var articleRouter = require('./routes/article');
var userRouter = require('./routes/user');
var commentRouter = require('./routes/comment');
app.use('/api', indexRouter);
app.use('/api', articleRouter);
app.use('/api', userRouter);
// 这个路由需要做登录校验
app.use('/my', commentRouter);


// 异常中间件
app.use(function(err, req, res, next) {
    // 数据验证失败
    //如果是解析token的错误,提示解析错误相关
    if (err.name === 'UnauthorizedError') {
        return res.json({
            status: 401,
            msg: '无效的token'
        })
    }
    res.status(err.status || 500); // 500：http响应状态码
    res.cc(500, err.message) // 500:业务状态码
});

module.exports = app;